From b062594ae65ed907eabff73df8cfb5036e21d20c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Sat, 6 Jul 2019 13:38:55 +0200 Subject: [PATCH] gl renderer: Properly clean up program state transforms --- gsk/gl/gskglrenderer.c | 1 + gsk/gl/gskglrenderops.c | 12 ++++++++++++ gsk/gl/gskglrenderopsprivate.h | 1 + 3 files changed, 14 insertions(+) diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c index f464c728a5..46c9e64c1c 100644 --- a/gsk/gl/gskglrenderer.c +++ b/gsk/gl/gskglrenderer.c @@ -2342,6 +2342,7 @@ gsk_gl_renderer_dispose (GObject *gobject) GskGLRenderer *self = GSK_GL_RENDERER (gobject); g_clear_pointer (&self->render_ops, g_array_unref); + ops_free (&self->op_builder); G_OBJECT_CLASS (gsk_gl_renderer_parent_class)->dispose (gobject); } diff --git a/gsk/gl/gskglrenderops.c b/gsk/gl/gskglrenderops.c index b23e8c5cde..7c02442d08 100644 --- a/gsk/gl/gskglrenderops.c +++ b/gsk/gl/gskglrenderops.c @@ -187,6 +187,17 @@ ops_init (RenderOpBuilder *builder) } } +void +ops_free (RenderOpBuilder *builder) +{ + int i; + + for (i = 0; i < GL_N_PROGRAMS; i ++) + { + gsk_transform_unref (builder->program_state[i].modelview); + } +} + void ops_set_program (RenderOpBuilder *builder, const Program *program) @@ -225,6 +236,7 @@ ops_set_program (RenderOpBuilder *builder, op.op = OP_CHANGE_MODELVIEW; gsk_transform_to_matrix (builder->current_modelview, &op.modelview); g_array_append_val (builder->render_ops, op); + gsk_transform_unref (program_state->modelview); program_state->modelview = gsk_transform_ref (builder->current_modelview); } diff --git a/gsk/gl/gskglrenderopsprivate.h b/gsk/gl/gskglrenderopsprivate.h index 84bafa74a0..b58f01af05 100644 --- a/gsk/gl/gskglrenderopsprivate.h +++ b/gsk/gl/gskglrenderopsprivate.h @@ -290,6 +290,7 @@ void ops_dump_framebuffer (RenderOpBuilder *builder, int width, int height); void ops_init (RenderOpBuilder *builder); +void ops_free (RenderOpBuilder *builder); void ops_push_debug_group (RenderOpBuilder *builder, const char *text); void ops_pop_debug_group (RenderOpBuilder *builder); -- 2.30.2